package com.whfp.coky.ble.listener

import com.clj.fastble.exception.BleException
import com.whfp.afs330h_sdk.bean.AFS330H_DeviceStatusBean
import com.whfp.afs330h_sdk.callback.DeviceCallback
import com.whfp.coky.ui.base.BaseActivity
import com.whfp.coky.utils.LogUtil

/**
 *
 * devCallback的再次封装
 * 检测设备交互处理
 * created by coky on 2022/4/8
 */
abstract class DevListener(val activity:BaseActivity<*,*>): DeviceCallback() {
    /**
     * 设备错误..
     * 未匹配项目卡时,云端下载对应的项目卡（other为项目卡名称）
     */
    override fun onDeviceError(code: Int, message: String?, other: String?) {
        activity.toast(message)
        activity.hideDialog()
        if (code == 20202 && !other.isNullOrEmpty()) { //未匹配项目卡
            getCloudBq(other)
        }
    }

    /**
     * 检测完成，执行完成方法
     * 一般情况是上次检测结果uploadResult
     */
    override fun onTestCompleted(result: String?) {
        LogUtil.e("检测完成：$result");
        activity.hideDialog()
        onTestComplete(result)
    }

    /**
     * 读取项目完成。
     * 一般情况是进行项目更新，updateProj
     */
    override fun onReadIDCompleted(result: String?) {
        LogUtil.e("读取设备项目和ID卡完成：$result");
        activity.hideDialog()
        updateProj(result)
    }

    /**
     * 加载云端项目完成。
     * 一般情况是进行项目更新，updateProj
     */
    override fun onloadCouldProjectSuccess(result: String?) {
        activity.hideDialog()
//        TipsDialog
        LogUtil.e("加载云端项目成功：")
        updateProj(result)
    }

    /**
     * 删除设备项目完成。
     * 一般情况是进行项目更新，updateProj
     */
    override fun onDeleteDeviceProjectSuccess(result: String?) {
        LogUtil.e("删除设备项目成功：")
        activity.hideDialog()
        updateProj(result)
    }

    //    无特殊处理
    override fun onDeviceStatus(deviceStatus: AFS330H_DeviceStatusBean?) {
        LogUtil.e("试剂卡是否已插入：${deviceStatus?.getCc()}");
        activity.hideDialog()
    }

    //    无特殊处理
    override fun notifyFailure(e:BleException) {
        activity.hideDialog()
        activity.toast("通知订阅失败");
    }

    //    无特殊处理
    override fun writeFailure(exception: BleException?) {
        activity.hideDialog()
        LogUtil.e("发送数据失败：${exception.toString()}");
    }





    //        devCallback------------
    abstract fun getCloudBq(bqName: String)//获取云端标曲
    abstract fun onTestComplete(result: String?)//测试完成
    abstract fun updateProj(json: String?)//项目更新

}